package com.ruicar.afs.cloud.workflow.greatwall.service.gwt;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruicar.afs.cloud.common.core.query.QueryCondition;
import com.ruicar.afs.cloud.workflow.api.dto.afsprocess.request.*;
import com.ruicar.afs.cloud.workflow.api.dto.flowprocess.WorkFlowResponse;
import com.ruicar.afs.cloud.workflow.api.dto.flowprocess.request.*;

import java.util.List;

/**
 * The type GwtWorkFlowEngineProcess
 * <p>Description: </p>
 *
 * @author Fzero
 * @version 1.0
 * @date Created on 2020.07.09 10:30:49
 * @since 1.0
 */
public interface GwtWorkFlowEngineProcess {
    /**
     * Start flow work flow common response
     *
     * @param startFlowRequest start flow request
     * @return the work flow common response
     */
    WorkFlowResponse startFlow(StartFlowRequest startFlowRequest, String bizData, String serviceName);

    /**
     * Task submit work flow common response
     *
     * @param taskSubmitRequest submit task request
     * @return the work flow common response
     */
    WorkFlowResponse taskSubmit(TaskSubmitRequest taskSubmitRequest, String bizData, String serviceName);

    /**
     * Task reformist work flow common response
     *
     * @param taskReformistRequest task reformist request
     * @return the work flow common response
     */
    WorkFlowResponse taskReformist(TaskReformistRequest taskReformistRequest, String bizData, String serviceName);

    /**
     * Flow five up work flow common response
     *
     * @param fLowGiveUpRequest f low give up request
     * @return the work flow common response
     */
    WorkFlowResponse flowGiveUp(FLowGiveUpRequest fLowGiveUpRequest, String serviceName);

    /**
     * Query cmd work flow common response
     *
     * @param queryFLowCmdRequest query f low cmd
     * @return the work flow common response
     */
    WorkFlowResponse queryCmd(QueryFLowCmdRequest queryFLowCmdRequest, String serviceName);

    /**
     * Query flow instance work flow common response
     *
     * @param queryFlowInstanceRequest query flow instance request
     * @return the work flow common response
     */
    WorkFlowResponse queryFlowInstance(QueryFlowInstanceRequest queryFlowInstanceRequest, String serviceName);

    /**
     * Task call back work flow common response
     *
     * @param taskCallBackRequest task call back request
     * @return the work flow common response
     */
    WorkFlowResponse taskCallBack(TaskCallBackRequest taskCallBackRequest, String bizData, String serviceName);


    WorkFlowResponse queryAllNode();

    WorkFlowResponse pageQueryNode(Page page);

    WorkFlowResponse pageQueryNodeUser(QueryCondition<QueryNodeUserRequest> queryNodeUserRequestQueryCondition);

    WorkFlowResponse addNodeUser(AddNodeUserRequest addNodeUserRequest);

    WorkFlowResponse changeTotalWeight(ChangeTotalUserWeightRequest changeTotalUserWeightRequest);

    WorkFlowResponse changeWeight(ChangeUserWeightRequest changeUserWeightRequest);

    WorkFlowResponse clearTaskCount(List<String> userIds);

    WorkFlowResponse removeNodeUsers(List<String> userIds);

    WorkFlowResponse moveUserToNode(MoveUserToNewNodeRequest request);


    WorkFlowResponse resumeFlowInstance(ResumeFlowRequest request);


    WorkFlowResponse pauseFlowInstance(PauseFlowInstance request);


}
